iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
自我挑戰組

Codewars Ruby Challenge in 30 Days系列 第 5

Codewars Ruby Challenge - Day 5/30

  • 分享至 

  • xImage
  •  

學習

  1. Range 可以直接 map 不用先 to_a:文件 提到以下兩點
    -Map is a Ruby method that you can use with Arrays, Hashes & Ranges.
    -Map returns a new array with the results.
  2. map 後面 block 的變數就只是臨時用:像龍哥用 x 或用其他代替都行,不用跟前面 range用一樣。我認為應該改成不一樣比較好,不然可能跟傳進得來 n 打架,也跟既有的 n 有區別
  3. 不要預設立場:總是一看到題目有點長就有點ㄘㄨㄚˋ,其實專心拆解一點都不能,提醒自己不要先嚇自己

題目:

# 「二的 N 次方」,當 n = 0,印出 2 的 0 次方;當 n = 2,印出 2 的 0 次方、2 的 1 次方、2 的 2 次方,以此類推。完成以下實作:
def powers_of_two(n)
  # 實作內容
end

答案需為:

p powers_of_two(0)   # [1]
p powers_of_two(1)   # [1, 2]
p powers_of_two(4)   # [1, 2, 4, 8, 16]

我的答案

def powers_of_two(n)
  (0..n).to_a.map { |n| 2 ** n }
end

p powers_of_two(0)   # [1]
p powers_of_two(1)   # [1, 2]
p powers_of_two(4)   # [1, 2, 4, 8, 16]

思路:

  1. 先用 range 產生 0 到 powers_of_two(n) 參數的所有數字
  2. 最後結果需要的是陣列,所以用 to_a 先做後面運算前的處理
  3. 題目要的是針對每個值做改變,這不就是 map 的特性嗎

龍哥建議的答案

def powers_of_two(n)
  (0..n).map { |x| 2 ** x }
end

(好像跟龍哥寫得完全一樣,其實不然,發現少了「to_a」)


上一篇
Codewars Ruby Challenge - Day 4/30
下一篇
Codewars Ruby Challenge - Day 6/30
系列文
Codewars Ruby Challenge in 30 Days30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言